package com.qk.management.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 *
 * @author sch
 * @created 2025-10-17 16:19
 * @description
 *  演示基于注解的切点表达式开发 AOP
 *1、定义切面类
 *2、定义切点（注解）
 *   2.1 自定义一个注解
 *   2.2 注解标记在需要增强的方法上
 *3、定义通知
 *
 */
@Aspect
@Component
public class MyAspect {

    // 定义切点 ： 被注解 MyAnno标记的方法 会被被增强
    @Pointcut("@annotation(com.qk.management.aop.anno.MyAnno)")
    public void pt(){}


    @Around("pt()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("---------环绕通知开始---------");
        Object ret = pjp.proceed();
        System.out.println("---------环绕通知结束----------");
        return ret;
    }

}